 /**
 ****************************************************************************************
 *
 * @file app_adv_data.h
 *
 * @brief Advertising Data definitions.
 *
 * Copyright (C) 2015. Dialog Semiconductor Ltd, unpublished work. This computer 
 * program includes Confidential, Proprietary Information and is a Trade Secret of 
 * Dialog Semiconductor Ltd.  All use, disclosure, and/or reproduction is prohibited 
 * unless authorized in writing. All Rights Reserved.
 *
 * <bluetooth.support@diasemi.com> and contributors.
 *
 ****************************************************************************************
 */
 
#ifndef _APP_ADV_DATA_H_
#define _APP_ADV_DATA_H_

#include <stdio.h>

/**********************************************************************/
/*!
	\brief
	A list of Advertising Data types commonly used by peripherals.
	These AD types are used to describe the capabilities of the
	peripheral, and get inserted inside the advertising or scan
	response payloads.

	\par Source
	\li \c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 11, 18
	\li \c https://www.bluetooth.org/en-us/specification/assigned-numbers/generic-access-profile
*/
/**********************************************************************/

#define ADV_TYPE_FLAGS                              		 "\x01" /**< \ref *Flags */
#define ADV_TYPE_INCOMPLETE_LIST_16BIT_SERVICE_IDS  		 "\x02" /**< Incomplete list of 16-bit Service IDs */
#define ADV_TYPE_COMPLETE_LIST_16BIT_SERVICE_IDS    		 "\x03" /**< Complete list of 16-bit Service IDs */
#define ADV_TYPE_INCOMPLETE_LIST_32BIT_SERVICE_IDS  		 "\x04" /**< Incomplete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
#define ADV_TYPE_COMPLETE_LIST_32BIT_SERVICE_IDS    		 "\x05" /**< Complete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
#define ADV_TYPE_INCOMPLETE_LIST_128BIT_SERVICE_IDS 		 "\x06" /**< Incomplete list of 128-bit Service IDs */
#define ADV_TYPE_COMPLETE_LIST_128BIT_SERVICE_IDS   		 "\x07" /**< Complete list of 128-bit Service IDs */
#define ADV_TYPE_SHORTENED_LOCAL_NAME               		 "\x08" /**< Shortened Local Name */
#define ADV_TYPE_COMPLETE_LOCAL_NAME                		 "\x09" /**< Complete Local Name */
#define ADV_TYPE_TX_POWER_LEVEL                     		 "\x0A" /**< TX Power Level (in dBm) */
#define ADV_TYPE_CLASS_OF_DEVICE                    		 "\x0D" /**< Class of Device */
#define ADV_TYPE_SIMPLE_PAIRING_HASH_C              		 "\x0E" /**< Simple Pairing Hash C */
#define ADV_TYPE_SIMPLE_PAIRING_RANDOM_R           		 "\x0F" /**< Simple Pairing Randomizer R */
#define ADV_TYPE_DEVICE_ID                          		 "\x10" /**< Device ID */
#define ADV_TYPE_SECURITY_MAN_OUT_OF_BAND_FLAGS     		 "\x11" /**< Security Manager Out of Band Flags */
#define ADV_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE    		 "\x12" /**< Slave Connection Interval Range */
#define ADV_TYPE_LIST_16BIT_SOLICITATION_UUIDS    		 "\x14" /**< List of 16-bit Service Solicitation UUIDs */
#define ADV_TYPE_LIST_32BIT_SOLICITATION_UUIDS    		 "\x1F" /**< List of 32-bit Service Solicitation UUIDs */
#define ADV_TYPE_LIST_128BIT_SOLICITATION_UUIDS    		 "\x15" /**< List of 128-bit Service Solicitation UUIDs */
#define ADV_TYPE_SERVICE_DATA_16BIT_UUID            		 "\x16" /**< Service Data - 16-bit UUID */
#define ADV_TYPE_SERVICE_DATA_32BIT_UUID            		 "\x20" /**< Service Data - 32-bit UUID */
#define ADV_TYPE_SERVICE_DATA_128BIT_UUID            	 "\x21" /**< Service Data - 128-bit UUID */
#define ADV_TYPE_LE_SECURE_CON_CONFIRM_VAL            	 "\x22" /**< LE Secure Connections Confirmation Value */
#define ADV_TYPE_LE_SECURE_CON_RANDOM_VAL            	 "\x23" /**< ​LE Secure Connections Random Value */
#define ADV_TYPE_PUBLIC_TARGET_ADDRESS	            	 "\x17" /**< ​Public Target Address */
#define ADV_TYPE_RANDOM_TARGET_ADDRESS	            	 "\x18" /**< ​Random Target Address */
#define ADV_TYPE_APPEARANCE                         		 "\x19" /**< \ref Appearance */
#define ADV_TYPE_ADVERTISING_INTERVAL               		 "\x1A" /**< Advertising Interval */
#define ADV_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS        		 "\x1B" /**< LE Bluetooth Device Address */
#define ADV_TYPE_LE_ROLE				               		 "\x1C" /**< ​LE Role */
#define ADV_TYPE_SIMPLE_PAIRING_HASH_C256           		 "\x1D" /**< ​​Simple Pairing Hash C-256 */
#define ADV_TYPE_SIMPLE_PAIRING_RANDOM_C256         		 "\x1E" /**< ​​Simple Pairing Randomizer R-256 */
#define ADV_TYPE_INFO_DATA_3D		               		 "\x3D" /**< ​​3D Information Data */
#define ADV_TYPE_MANUFACTURER_SPECIFIC_DATA         		 "\xFF" /**< Manufacturer Specific Data */


/**********************************************************************/
/*!
	\brief
	A list of values for the FLAGS AD Type

	\note
	You can use more than one value in the FLAGS AD Type (ex.
	LE_GENERAL_DISCOVERABLE and BREDR_NOT_SUPPORTED).

	\par Source
	\li \c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 18.1
*/
/**********************************************************************/
#define ADV_FLAG_LE_LIMITED_DISCOVERABLE 		"\x01" /**< *Peripheral device is discoverable for a limited period of time */
#define ADV_FLAG_LE_GENERAL_DISCOVERABLE 		"\x02" /**< Peripheral device is discoverable at any moment */
#define ADV_FLAG_BREDR_NOT_SUPPORTED     		"\x04" /**< Peripheral device is LE only */
#define ADV_FLAG_SIMULTANEOUS_LE_BREDR_C 		"\x08" /**< Not relevant - central mode only */
#define ADV_FLAG_SIMULTANEOUS_LE_BREDR_H 		"\x10" /**< Not relevant - central mode only */

/**********************************************************************/

/*!
	\brief
	A list of values for the 16bits Service UUIDs

	\note
	You can use more than one value in the INCOMPLETE_LIST_16BIT_SERVICE_IDS or COMPLETE_LIST_16BIT_SERVICE_IDS AD Type (ex.
	UUID_BATTERY_SERVICE and UUID_DEVICE_INFORMATION_SERVICE).

	\par Source
	\li \c https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx
*/
/**********************************************************************/
#define ADV_UUID_ALERT_NOTIFICATION_SERVICE     	"\x11\x18" /**< Alert Notification Service */
#define ADV_UUID_BATTERY_SERVICE                	"\x0F\x18" /**< Battery Service */
#define ADV_UUID_BLOOD_PRESSURE_SERVICE         	"\x10\x18" /**< Blood Pressure */
#define ADV_UUID_CURRENT_TIME_SERVICE           	"\x05\x18" /**< Current Time Service */
#define ADV_UUID_CYCLING_SPEED_AND_CADENCE      	"\x16\x18" /**< Cycling Speed and Cadence */
#define ADV_UUID_DEVICE_INFORMATION_SERVICE     	"\x0A\x18" /**< Device Information Service */
#define ADV_UUID_GLUCOSE_SERVICE                	"\x08\x18" /**< Glucose */
#define ADV_UUID_HEALTH_THERMOMETER_SERVICE     	"\x09\x18" /**< Health Thermometer */
#define ADV_UUID_HEART_RATE_SERVICE             	"\x0D\x18" /**< Heart Rate */
#define ADV_UUID_HUMAN_INTERFACE_DEVICE_SERVICE 	"\x12\x18" /**< Human Interface Device */
#define ADV_UUID_IMMEDIATE_ALERT_SERVICE        	"\x02\x18" /**< Immediate Alert */
#define ADV_UUID_LINK_LOSS_SERVICE              	"\x03\x18" /**< Link Loss */
#define ADV_UUID_NEXT_DST_CHANGE_SERVICE        	"\x07\x18" /**< Next DST Change Service */
#define ADV_UUID_PHONE_ALERT_STATUS_SERVICE     	"\x0E\x18" /**< Phone Alert Status Service */
#define ADV_UUID_REFERENCE_TIME_UPDATE_SERVICE  	"\x06\x18" /**< Reference Time Update Service */
#define ADV_UUID_RUNNING_SPEED_AND_CADENCE      	"\x14\x18" /**< Running Speed and Cadence */
#define ADV_UUID_SCAN_PARAMETERS_SERVICE        	"\x13\x18" /**< Scan Parameters */
#define ADV_UUID_TX_POWER_SERVICE               	"\x04\x18" /**< Tx Power */
#define ADV_UUID_GENERIC_ACCESS_SERVICE				"\x00\x18" /**< Generic Access */
#define ADV_UUID_GENERIC_ATTRIBUTE_SERVICE			"\x01\x18" /**< Generic Attribute */
#define ADV_UUID_SCAN_PARAMETERS_SERVICE			"\x13\x18" /**< Scan Parameters */
#define ADV_UUID_AUTOMATION_IO_SERVICE				"\x15\x18" /**< Automation IO */
#define ADV_UUID_CYCLING_POWER_SERVICE				"\x18\x18" /**< Cycling Power */
#define ADV_UUID_LOCATION_NAVIGATION_SERVICE		"\x19\x18" /**< Location and Navigation */
#define ADV_UUID_ENVIROMENT_SENSE_SERVICE			"\x1A\x18" /**< Environmental Sensing */
#define ADV_UUID_BODY_COMPOSITION_SERVICE			"\x1B\x18" /**< Body Composition */
#define ADV_UUID_USER_DATA_SERVICE					"\x1C\x18" /**< User Data */
#define ADV_UUID_WEIGHT_SCALE_SERVICE				"\x1D\x18" /**< Weight Scale */
#define ADV_UUID_BOND_MANAGMENT_SERVICE				"\x1E\x18" /**< Bond Management */
#define ADV_UUID_GLUCOSE_CONTINUOUS_SERVICE			"\x1F\x18" /**< Continuous Glucose Monitoring */
#define ADV_UUID_INTERNET_PROTOCOL_SERVICE			"\x20\x18" /**< Internet Protocol Support */
#define ADV_UUID_INDOOR_POSITION_SERVICE			"\x21\x18" /**< Indoor Positioning */
#define ADV_UUID_PULSE_OXIMETER_SERVICE				"\x22\x18" /**< Pulse Oximeter */

/// Proprietary
#define ADV_UUID_SPOTAR_SERVICE						"\xF5\xFE" /**< SPOTAR Service */
/**********************************************************************/

/*!
	\brief
	A list of values for the APPEARANCE AD Type, which describes the
	physical shape or appearance of the device

	\par Source
	\li \c Bluetooth Core Specification Supplement, Part A, Section 1.12
	\li \c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 12.2
	\li \c https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
*/
/**********************************************************************/
#define ADV_APPEARANCE_UNKNOWN                                        "\x0"		/**< Unknown of unspecified appearance type */
#define ADV_APPEARANCE_GENERIC_PHONE                                  "\x40"		/**< Generic Phone */
#define ADV_APPEARANCE_GENERIC_COMPUTER                               "\x80"		/**< Generic Computer */
#define ADV_APPEARANCE_GENERIC_WATCH                                  "\xC0"		/**< Generic Watch */
#define ADV_APPEARANCE_WATCH_SPORTS_WATCH                             "\xC1"		/**< Sports Watch */
#define ADV_APPEARANCE_GENERIC_CLOCK                                  "\x0\x01"	/**< Generic Clock */
#define ADV_APPEARANCE_GENERIC_DISPLAY                                "\x40\x01"	/**< Generic Display */
#define ADV_APPEARANCE_GENERIC_REMOTE_CONTROL                         "\x80\x01"	/**< Generic Remote Control */
#define ADV_APPEARANCE_GENERIC_EYE_GLASSES                            "\x0C\x01"	/**< Generic Eye Glasses */
#define ADV_APPEARANCE_GENERIC_TAG                                    "\x0\x02"	/**< Generic Tag */
#define ADV_APPEARANCE_GENERIC_KEYRING                                "\x40\x02"	/**< Generic Keyring */
#define ADV_APPEARANCE_GENERIC_MEDIA_PLAYER                           "\x80\x02"	/**< Generic Media Player */
#define ADV_APPEARANCE_GENERIC_BARCODE_SCANNER                        "\xC0\x02"	/**< Generic Barcode Scanner */
#define ADV_APPEARANCE_GENERIC_THERMOMETER                            "\x0\x03"	/**< Generic Thermometer */
#define ADV_APPEARANCE_THERMOMETER_EAR                                "\x01\x03"	/**< Ear Thermometer */
#define ADV_APPEARANCE_GENERIC_HEART_RATE_SENSOR                      "\x40\x03"	/**< Generic Heart Rate Sensor */
#define ADV_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT              "\x41\x03"	/**< Belt Heart Rate Sensor */
#define ADV_APPEARANCE_GENERIC_BLOOD_PRESSURE                         "\x80\x03"	/**< Generic Blood Pressure */
#define ADV_APPEARANCE_BLOOD_PRESSURE_ARM                             "\x81\x03"	/**< Arm Blood Pressure */
#define ADV_APPEARANCE_BLOOD_PRESSURE_WRIST                           "\x82\x03"	/**< Wrist Blood Pressure */
#define ADV_APPEARANCE_HUMAN_INTERFACE_DEVICE_HID                     "\xC0\x03"	/**< Human Interface Device (HID) */
#define ADV_APPEARANCE_KEYBOARD                                       "\xC1\x03"	/**< Keyboard */
#define ADV_APPEARANCE_MOUSE                                          "\xC2\x03"	/**< Mouse */
#define ADV_APPEARANCE_JOYSTICK                                       "\xC3\x03"	/**< Joystick */
#define ADV_APPEARANCE_GAMEPAD                                        "\xC4\x03"	/**< Gamepad */
#define ADV_APPEARANCE_DIGITIZER_TABLET                               "\xC5\x03"	/**< Digitizer Tablet */
#define ADV_APPEARANCE_CARD_READER                                    "\xC6\x03"	/**< Card Read */
#define ADV_APPEARANCE_DIGITAL_PEN                                    "\xC7\x03"	/**< Digital Pen */
#define ADV_APPEARANCE_BARCODE_SCANNER                                "\xC8\x03"	/**< Barcode Scanner */
#define ADV_APPEARANCE_GENERIC_GLUCOSE_METER                          "\x0\x04"	/**< Generic Glucose Meter */
#define ADV_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR                 "\x40\x04"	/**< Generic Running/Walking Sensor */
#define ADV_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE                 "\x41\x04"	/**< In Shoe Running/Walking Sensor */
#define ADV_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE                 "\x42\x04"	/**< On Shoe Running/Walking Sensor */
#define ADV_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP                  "\x43\x04"	/**< On Hip Running/Walking Sensor */
#define ADV_APPEARANCE_GENERIC_CYCLING                                "\x80\x04"	/**< Generic Cycling */
#define ADV_APPEARANCE_CYCLING_CYCLING_COMPUTER                       "\x81\x04"	/**< Cycling Computer */
#define ADV_APPEARANCE_CYCLING_SPEED_SENSOR                           "\x82\x04"	/**< Cycling Speed Senspr */
#define ADV_APPEARANCE_CYCLING_CADENCE_SENSOR                         "\x83\x04"	/**< Cycling Cadence Sensor */
#define ADV_APPEARANCE_CYCLING_POWER_SENSOR                           "\x84\x04"	/**< Cycling Power Sensor */
#define ADV_APPEARANCE_CYCLING_SPEED_AND_CADENCE_SENSOR               "\x85\x04"	/**< Cycling Speed and Cadence Sensor */
#define ADV_APPEARANCE_PULSE_OXIMETER_GENERIC                         "\x40\x0C"	/**< Generic Pulse Oximeter */
#define ADV_APPEARANCE_PULSE_OXIMETER_FINGERTIP                       "\x41\x0C"	/**< Fingertip Pulse Oximeter */
#define ADV_APPEARANCE_PULSE_OXIMETER_WRIST_WORN                      "\x42\x0C"	/**< Wrist Worn Pulse Oximeter */
#define ADV_APPEARANCE_OUTDOOR_GENERIC                                "\x40\x14"	/**< Generic Outdoor */
#define ADV_APPEARANCE_OUTDOOR_LOCATION_DISPLAY_DEVICE                "\x41\x14"	/**< Outdoor Location Display Device */
#define ADV_APPEARANCE_OUTDOOR_LOCATION_AND_NAVIGATION_DISPLAY_DEVICE "\x42\x14"	/**< Outdoor Location and Navigation Display Device */
#define ADV_APPEARANCE_OUTDOOR_LOCATION_POD                           "\x43\x14"	/**< Outdoor Location Pod */
#define ADV_APPEARANCE_OUTDOOR_LOCATION_AND_NAVIGATION_POD            "\x44\x14"	/**< Outdoor Location and Navigation Pod */

#define ADV_DIALOG_MANUFACTURER_CODE                                  "\x00\xD2"

#endif	// _APP_ADV_DATA_H_
